package k3_IO.p2_fileStream.demo05;

import k3_IO.p2_fileStream.demo01.Employee;

import java.io.*;

public class WriteObjectByArrays {

    /**
     * 把emp对象先写出到数组流中，然后从数组流中读取出来再写出文件中
     */
    public static void writeEmployee() throws Exception{

        //创建一个数组流(节点流)
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //基于数组流(节点流) 创建一个对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        //把对象写出到数组流中
        oos.writeObject(new Employee("tom","哈尔滨",20));

        //创建一个文件输出流，然后用缓冲流对其进行封装
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E://emps.txt"));

        //把数组流中的所有数据(字节数组表示的)写出到文件中
        byte[] allBytes = baos.toByteArray();
        bos.write(allBytes);

        bos.close();
        oos.close();

    }

    /**
     * 把emp对象先从文件中读取到数组流中，再从数组流读出展示
     */
    public static void readEmployee() throws Exception{

        //基于文件流(节点流) 创建一个缓冲流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E://emps.txt"));

        //把输入流中的所有数据以字节数组的形式存放起来
        byte[] allBytes = bis.readAllBytes();

        //基于字节数组创建一个数组流(节点流)。再基于节点流创建一个对象输入流
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(allBytes));

        //从对象流中读取处这个对象
        Employee emp = (Employee) ois.readObject();

        System.out.println(emp);

        ois.close();
        bis.close();

    }

    public static void main(String[] args) throws Exception {
//        WriteObjectByArrays.writeEmployee();
        WriteObjectByArrays.readEmployee();
    }

}
